package com.cleaningcloud.cld.mapper;

import com.cleaningcloud.cld.domain.CldWorkplan;
import com.cleaningcloud.cld.domain.dto.CldWorkplanDto;
import com.cleaningcloud.cld.domain.vo.CldWorkplanVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 工作计划Mapper接口
 *
 * @author cleaningcloud
 * @date 2024-10-17
 */
public interface CldWorkplanMapper {

    /**
     * 查询工作计划
     *
     * @param workplanId 工作计划主键
     * @return 工作计划
     */
    CldWorkplanVo selectCldWorkplanByWorkplanId(Long workplanId);

    /**
     * 查询工作计划列表
     *
     * @param cldWorkplan 工作计划
     * @return 工作计划集合
     */
    List<CldWorkplanVo> selectCldWorkplanList(CldWorkplanDto cldWorkplan);

    /**
     * 查询工作计划列表
     *
     * @param cldWorkplan 工作计划
     * @return 工作计划集合
     */
    List<CldWorkplanVo> selectCldWorkplanTaskList(CldWorkplanDto cldWorkplan);


    /**
     * 工作计划按项目分组统计
     *
     * @param cldWorkplanDto
     * @return
     */
    List<Map<String, Object>> selectCldWorkplanGroupProjectList(CldWorkplanDto cldWorkplanDto);

    /**
     * 新增工作计划
     *
     * @param cldWorkplan 工作计划
     * @return 结果
     */
    int insertCldWorkplan(CldWorkplan cldWorkplan);

    /**
     * 修改工作计划
     *
     * @param cldWorkplan 工作计划
     * @return 结果
     */
    int updateCldWorkplan(CldWorkplan cldWorkplan);

    /**
     * 删除工作计划
     *
     * @param workplanId 工作计划主键
     * @return 结果
     */
    int deleteCldWorkplanByWorkplanId(Long workplanId);

    /**
     * 批量删除工作计划
     *
     * @param workplanIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCldWorkplanByWorkplanIds(Long[] workplanIds);

    /**
     * 查询该项目岗位是否已存在同性质的工作计划
     *
     * @param projectId
     * @param postId
     * @param cleanNature
     * @return
     */
    @Select("select count(1) from cld_workplan where project_id = #{projectId} and post_id = #{postId} and clean_nature = #{cleanNature} and flag = 0")
    int selectCountByProjectIdAndPostId(@Param("projectId") Long projectId, @Param("postId") Long postId, @Param("cleanNature") Long cleanNature);
}
